package com.ciaojian.core.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ciaojian.core.model.OrderComment;
import com.ciaojian.core.model.vo.CommentVo;
import com.ciaojian.core.model.vo.OrderCommentPageVo;
import com.ciaojian.core.model.vo.OrderCommentVo;
import com.ciaojian.core.model.vo.WorkerPageVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单评价表 Mapper 接口
 * </p>
 *
 * @author ${author}
 * @since 2020-08-19
 */
public interface OrderCommentMapper extends BaseMapper<OrderComment> {
    /**
     * 根据订单 ID 查找订单评价
     *
     * @param orderId 订单 ID
     * @return 订单评价
     */
    @Select("SELECT * FROM d_order_comment WHERE order_id = #{orderId} ")
    OrderComment getByOrderId(@Param("orderId") Integer orderId);

    /**
     * 统计各类评价情况
     *
     * @param userId   用户ID
     * @param workerId 发型师 Id
     * @param storeId  门店 Id
     * @return 评价情况
     */
    CommentVo countCommentByWorkerIdAndStoreId(@Param("userId") Integer userId,
                                               @Param("workerId") Integer workerId,
                                               @Param("storeId") Integer storeId);

    /**
     * 是否未评价
     *
     * @param orderId 订单 id
     * @return 未评价返回 true
     */
    Boolean notCommented(@Param("orderId") Integer orderId);

    /**
     * 分页查询评价
     *
     * @param page   分页插件
     * @param store  店面 id
     * @param type   评论类型 全部 0,有图 9,满意度 5 4 3 2 1
     * @param worker 发型师 id
     * @return 分页后的评价列表
     */
    Page<OrderComment> page(Page<OrderComment> page,
                            @Param("userId") Integer userId,
                            @Param("store") Integer store,
                            @Param("type") Integer type,
                            @Param("worker") Integer worker);

    /**
     * 查询店铺好评
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param orderIds  店面 id 集合
     * @return 客数
     */
    Integer countGoodComment(@Param("startDate") Date startDate,
                             @Param("endDate") Date endDate,
                             @Param("orderIds") Integer[] orderIds);


    Integer getFirstMoney(@Param("userId") Integer userId);

    Integer getDEvaluateCount(@Param("workerId") Integer workerId, @Param("score") Integer score, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    List<OrderCommentVo> findDEvaluate(@Param("workerId") Integer workerId, @Param("score") Integer score, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    List<Map<String, Object>> scoresGroup(@Param("workerId") Integer workerId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
